<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*" %> <%@ page import="java.net.URLDecoder"%> <%@ page import="java.io.*" %> <% try{ String strFileName = request.getParameter("fileName"); //file명 req String strPath = "/home/tomcat/www1/ys/upload/"; File file = new File(strPath+strFileName); //파일 풀 경로 response.reset(); response.setContentType("application/octer-stream"); // 일반파라미터 application/x-www-form-urlencoded 디폴트로 설정 되있다! // 파일은 다르기 때문에 response 값을 바꾼것임 // 해더의 이름에 내가 원하는 전송할 파일 이름을 넣은 것임 // 파일이름은 브라우저 설정 문자셋으로 바뀐것으로 넣는다! response.setHeader("Content-Disposition", "attachment;filename="+strFileName+""); // 인코딩 설정값도 변경 response.setHeader("Content-Transper-Encoding", "binary"); // 사이즈도 알려줘야 한다 response.setContentLength((int)file.length()); // cache에 안 넣을 거다! response.setHeader("Pargma", "no-cache"); // Expires 는 또 무슨 뜻인가염 넹?! response.setHeader("Expires", "-1"); byte[] data = new byte[1024 * 1024]; BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file)); // response가 사용하는 OutputStream()을 out 스트림으로 사용 BufferedOutputStream fos = new BufferedOutputStream(response.getOutputStream()); int count = 0; while((count = fis.read(data)) != -1){ fos.write(data); } if(fis != null) fis.close(); if(fos != null) fos.close(); }catch(Exception e){ System.out.println("download error : " + e); } // jsp 에는 이미 내장객체로 out이 사용되고 있기 때문에 // outputstream을 사용하려면 비워 줘야 한다고 함! out.clear(); // pageContext.pushBody() 이건 또 뭐란 말인가? out.clear(); out = pageContext.pushBody(); %>